ACM V8 – Task Backlog (Master Consolidated Edition)
Last Updated: 2025-11-12
Focus: Hands-Off Analytics | Continuous Adaptation | Self-Tuning
1 Core Analytics & Detection
1.1 Data Quality & Preprocessing
No open items (DATA-05 completed and verified November 2025).
1.2 Feature Engineering
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| FEAT-04 |
Medium |
core/fast_features.py |
Rolling window optimization (Rust bridge) |
≥ 20 % speedup vs baseline |
Planned |
1.3 Detectors & Anomaly Detection
No open items (DET-07 audit completed November 2025).
1.4 Fusion & Episode Detection
No open items (FUSE-04 schema pass completed November 2025).
1.5 Regime Clustering & Operating States
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| REG-08 |
Medium |
core/regimes.py |
EM-style regime refinement |
Second-pass boundary update improves silhouette |
Planned |
REG-09 |
High |
core/regimes.py |
Remove k=1 fallback and rely on quality flagging |
Low-silhouette runs keep k >= 2 while quality flags surface in metadata |
✅ DONE – Auto-k now enforces k ≥ 2, logs silhouette sweeps, and chunk replay (FD_FAN/GAS_TURBINE, 2025-11-12) confirms quality flags. |
REG-10 |
High |
core/regimes.py |
Re-standardize feature basis & track PCA variance |
Combined basis normalized; PCA variance/explained logs emitted |
✅ DONE – Basis scaler applied across PCA/raw features with variance telemetry; warnings surface when coverage < target. |
REG-11 |
Medium |
core/regimes.py |
Median smoothing & health-aware dwell enforcement |
Label smoothing uses median filter and dwell fixes prefer healthier IDs |
✅ DONE – SciPy median filter (fallback to manual) plus health-priority dwell replacement eliminates A–B–A flicker. |
REG-12 |
High |
core/regimes.py |
Robust transient detection state machine |
Startup/shutdown detection uses weighted ROC + state machine heuristics |
✅ DONE – Weighted ROC with trend-aware state machine labels startup/shutdown/trip; replay logs show expected distribution. |
REG-13 |
High |
core/regimes.py |
Versioned regime model persistence with validation |
Metadata carries model version; incompatible loads trigger retrain |
✅ DONE – Regime artifacts persist version/sklearn info; stale loads abort with warning and force retrain. |
REG-14 |
High |
core/regimes.py |
Regime input & config validation |
Data/config schema issues logged before clustering proceeds |
✅ DONE – Pre-fit validators log NA/variance/config issues before clustering, guarding against bad inputs. |
REG-15 |
Medium |
core/regimes.py |
Sample-based auto-k evaluation |
Large datasets down-sample for silhouette search without accuracy loss |
✅ DONE – Auto-k uses capped evaluation samples, then fits full data with selected k. |
REG-16 |
Medium |
core/regimes.py |
Regime reporting enhancements |
Quality metrics & feature importance exports land in analytics tables |
✅ DONE – Outputs now include feature importance, PCA variance, and quality notes for analytics/reporting. |
2 Model Management & Persistence
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| CFG-01 |
Deferred |
utils/sql_config.py |
Migrate config store CSV → SQL with history tables |
SQL read/write validated |
Deferred |
2.1 Model Evaluation & QA
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| EVAL-02 |
Medium |
scripts/test_faults.py |
Synthetic fault injection harness |
Synthetic dataset + detector validation logs |
Planned |
| EVAL-03 |
Medium |
notebooks/evaluation.ipynb |
Precision/recall benchmarking |
Metrics notebook committed with latest runs |
Planned |
3 Batch Streaming & Cold-Start
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| STREAM-01 |
Low |
core/river_models.py |
River Half-Space Trees integration |
Streaming detector runs without errors |
Planned |
| STREAM-02 |
Low |
core/river_models.py |
River state persistence |
Checkpoint reload works |
Planned |
| STREAM-03 |
Deferred |
core/acm_main.py |
Scheduler loop for continuous runs |
15–30 min window scoring verified |
Deferred |
4 Outputs & Reporting
4.1 Tabular Outputs
All tabular output hardening items are complete (see Completed Task Stats). No open work tracked in this section.
4.2 Chart Quality & Reliability
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| CHART-08 |
High |
core/outliers.py |
omr_diagnostics.csv reporting |
Table lists model stats, saturation, calibration |
Planned |
CHART-10 |
High |
core/fuse.py |
fusion_quality_report.csv |
Fusion weights + quality flags exported |
✅ DONE - Superseded by fusion_metrics.csv (auto-tuned weights + diagnostics). |
| CHART-11 |
Medium |
core/output_manager.py |
Forecast confidence bands |
±1σ/±2σ shading added to forecast overlay chart |
Planned |
CHART-13 |
Medium |
core/output_manager.py |
Episode annotations on timelines |
Timeline charts display episode IDs |
✅ DONE - Episode timeline now shows EP-IDs and severity labels inline. |
CHART-15 |
Medium |
core/output_manager.py |
OMR saturation warning banner |
Warning banner rendered when saturation > 30 % |
✅ DONE - Detector comparison issues a banner when OMR saturation breaches 30%. |
CHART-16 |
Medium |
core/output_manager.py |
Detector weight overlay |
Detector charts annotate current fusion weight |
✅ DONE - Fusion weights added to detector legend entries. |
CHART-17 |
Medium |
core/output_manager.py |
Regime boundary markers |
Timeline charts show regime transitions |
✅ DONE - Health timeline annotates regime entry points as per ACM explainer guidance. |
CHART-18 |
Medium |
core/output_manager.py |
Drift event annotations |
Drift magnitude + timestamp callouts on timeline |
✅ DONE - Drift spans plus labels render on health timeline. |
| CHART-19 |
Medium |
scripts/validate_charts.py |
Chart validation script |
Automated validation reports chart issues |
Planned |
| CHART-20 |
Medium |
docs/ |
Chart documentation refresh |
Catalog updated with latest preconditions/examples |
Planned |
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| PERF-01 |
Medium |
All modules |
Runtime profiling (py-spy) |
Hotspot report generated |
Planned |
| PERF-02 |
Medium |
rust_bridge/ |
Rust bridge for rolling stats |
≥ 3× speedup |
Planned |
| PERF-04 |
Medium |
core/fast_features.py |
Expand Polars adoption beyond features |
50 % faster overall |
Planned |
| PERF-10 |
Medium |
Config |
Reduce feature window size research |
Speed/quality trade validated |
Planned |
6 Documentation & Operations
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| DOC-03 |
Medium |
docs/VALIDATION_REPORT.md |
Update validation results v2 |
Latest assets included |
Pending |
| DOC-04 |
Medium |
docs/CONFIGURATION_GUIDE.md |
Comprehensive config documentation |
All parameters explained |
Pending |
| OPS-01 |
Low |
scripts/cron_task.ps1 |
Scheduler integration |
Automated batch runs |
Planned |
| OPS-02 |
Low |
core/acm_main.py |
Email alert on failure |
SMTP notification tested |
Planned |
| OPS-03 |
Low |
Docs |
Model retraining policy |
Defined in governance doc |
Planned |
| OPS-04 |
Low |
docs/DEPLOYMENT.md |
Deployment runbook |
Steps verified |
Planned |
| OPS-05 |
Low |
docs/OPERATOR_GUIDE.md |
Operator training material |
Guide with screenshots |
Planned |
7 Technical Debt (Open Items)
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| DEBT-07 |
Medium |
Multiple |
Error handling tightening |
Narrow exceptions with structured errors |
Pending |
| DEBT-14 |
Low |
core/acm_main.py |
Testing hooks / path handling |
Functions factored for unit tests |
Pending |
| DEBT-15 |
Low |
core/acm_main.py |
Error truncation policy |
Full stack persisted with truncation note |
Pending |
8 Forecast & AR(1) Model
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| FCST-01 |
Critical |
core/forecast.py |
Implement growing forecast variance for AR(1) |
Confidence intervals widen with forecast horizon |
Planned |
| FCST-02 |
Critical |
core/forecast.py |
Fix warm start bias in AR(1) scoring |
First residual is not a spurious anomaly |
Planned |
| FCST-03 |
Critical |
core/forecast.py |
Exclude first residual from std dev calculation |
Residual standard deviation is not biased by first point |
Planned |
| FCST-04 |
High |
core/forecast.py |
Add stability checks for AR(1) coefficient |
Unstable coefficients are clamped and logged |
Planned |
| FCST-05 |
High |
core/forecast.py |
Improve frequency regex validation |
Invalid frequency strings are handled gracefully |
Planned |
| FCST-06 |
High |
core/forecast.py |
Make horizon clamping explicit and warn user |
User is warned when forecast horizon is clamped |
Planned |
| FCST-07 |
Medium |
core/forecast.py |
Correct "divergence" metric to "mean reversion" |
Diagnostics correctly report mean reversion |
Planned |
| FCST-08 |
Medium |
core/forecast.py |
Improve series selection scoring for AR(1) |
Scoring prefers series with high autocorrelation |
Planned |
| FCST-09 |
Medium |
core/forecast.py |
Remove hardcoded "fused" series override |
Forecast can run on series other than "fused" |
Planned |
| FCST-10 |
Medium |
core/forecast.py |
Add backtesting to validate forecast accuracy |
Forecast accuracy metrics are generated on a holdout set |
Planned |
| FCST-11 |
Medium |
core/forecast.py |
Add stationarity testing for AR(1) |
Non-stationary series are flagged |
Planned |
| FCST-12 |
Low |
core/forecast.py |
Optimize DataFrame fusion using NumPy |
DataFrame fusion is faster |
Planned |
| FCST-13 |
Low |
core/forecast.py |
Improve numerical stability for high phi values |
High phi values do not cause numerical instability |
Planned |
| FCST-14 |
Low |
core/forecast.py |
Add comprehensive documentation for AR(1) model |
AR(1) model assumptions and limitations are documented |
Planned |
9 AVEVA-Inspired Features (Deferred)
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| AV-01 → AV-03 |
Deferred |
Analytics / Output |
Residual timeline, charts, KPI |
Residual CSV and charts added |
Deferred |
| AV-06 → AV-09 |
Deferred |
core/diagnostics.py |
Fault mapping and libraries |
Diagnostics tables built |
Deferred |
| AV-13 → AV-14 |
Deferred |
core/regimes.py, core/fuse.py |
Transient handling and threshold adjust |
Reduced false alerts |
Deferred |
| AV-15 → AV-17 |
Deferred |
core/rul_estimator.py, output_manager.py |
RUL estimation and days-to-threshold KPI |
RUL outputs generated |
Deferred |
| AV-11 → AV-12 |
Deferred |
core/fuse.py, tables/ |
Alert priority and case library |
Operational logging |
Deferred |
| AV-04 → AV-18 |
Deferred |
core/output_manager.py |
Health dashboard and gauge visuals |
Composite PNG dashboard |
Deferred |
10 SQL Integration (ACTIVE - Phase 1)
Status: Database ready, dual-write mode implemented, ready for testing
Updated: November 13, 2025
Infrastructure Complete
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| SQL-01 |
DONE |
scripts/sql/*.sql |
Define core schemas |
21 tables, 19 stored procs, 5 views |
COMPLETE |
| SQL-02 |
DONE |
scripts/sql/*.sql |
Stored procedures |
19 usp_Write_ procedures deployed |
COMPLETE |
| SQL-03 |
DONE |
core/sql_client.py |
Windows Authentication support |
Trusted_Connection working |
COMPLETE |
| SQL-04 |
DONE |
core/sql_performance.py |
Performance monitoring |
SQLBatchWriter + monitor ready |
COMPLETE |
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| SQL-10 |
CRITICAL |
Config |
Enable dual_mode flag |
config.yaml updated |
TODO |
|
|
|
→ Set output.dual_mode: true in config |
→ File and SQL outputs both enabled |
|
|
|
|
→ Verify config loads correctly |
→ OutputManager sees dual_mode=True |
|
| SQL-11 |
CRITICAL |
Database |
Register equipment records |
Equipment table populated |
TODO |
|
|
|
→ Insert FD_FAN into Equipment table |
→ SELECT * FROM Equipment shows record |
|
|
|
|
→ Insert GAS_TURBINE into Equipment |
→ equip_id values ready for FK references |
|
| SQL-12 |
CRITICAL |
Pipeline |
Run 10+ dual-write cycles |
Files + SQL both populated |
TODO |
|
|
|
→ Execute: python -m core.acm_main --equip FD_FAN --enable-report |
→ artifacts/ folder has CSVs |
|
|
|
|
→ Run for both FD_FAN and GAS_TURBINE |
→ SQL tables show matching row counts |
|
|
|
|
→ Repeat 10 times to test stability |
→ No crashes, consistent data |
|
| SQL-13 |
HIGH |
Validation |
Create validation script |
validate_dual_write.py working |
TODO |
|
|
|
→ Build scripts/sql/validate_dual_write.py |
→ Script compares CSV vs SQL row counts |
|
|
|
|
→ Check all 26 analytics tables |
→ Reports match/mismatch status |
|
|
|
|
→ Validate numeric values within 1e-6 |
→ Passes for all tables |
|
| SQL-14 |
HIGH |
Testing |
Compare file vs SQL outputs |
Row counts and values match |
TODO |
|
|
|
→ Run validation script from SQL-13 |
→ Zero mismatches reported |
|
|
|
|
→ Check ScoresTS timestamps match |
→ Datetime columns aligned |
|
|
|
|
→ Verify drift_summary values |
→ JSON fields populated correctly |
|
| SQL-15 |
HIGH |
Performance |
Measure SQL write times |
Baseline established, target <15s |
TODO |
|
|
|
→ Instrument OutputManager.write_tables() |
→ Log timing for each table write |
|
|
|
|
→ Document current avg time (~58s) |
→ Identify slowest tables |
|
|
|
|
→ Test batch size optimization |
→ Achieve <15s per run |
|
Phase 2: Model Persistence (NEXT)
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| SQL-20 |
HIGH |
core/model_persistence.py |
Implement save_to_sql() |
Models written to ModelRegistry |
TODO |
|
|
|
→ Add save_to_sql() method to ModelVersionManager |
→ Accepts sql_client, equip_id, model_type |
|
|
|
|
→ Serialize models to JSON (joblib bytes → base64) |
→ Store in ModelRegistry.model_artifact |
|
|
|
|
→ Compute signature hash for versioning |
→ Unique model_signature per config |
|
|
|
|
→ Increment version_number automatically |
→ v1, v2, v3... monotonic |
|
| SQL-21 |
HIGH |
core/model_persistence.py |
Implement load_from_sql() |
Models loaded from SQL |
TODO |
|
|
|
→ Add load_from_sql() method |
→ Queries ModelRegistry by equip_id |
|
|
|
|
→ Support latest vs specific version |
→ version=None gets max(version_number) |
|
|
|
|
→ Deserialize JSON → Python objects |
→ Returns model ready for .predict() |
|
|
|
|
→ Handle missing model gracefully |
→ Returns None if not found |
|
| SQL-22 |
HIGH |
Testing |
Model round-trip validation |
Save/load produces identical predictions |
TODO |
|
|
|
→ Create scripts/sql/test_model_persistence.py |
→ Trains AR1, PCA, IForest, GMM, Regimes |
|
|
|
|
→ Save all 5 model types to SQL |
→ ModelRegistry has 5 rows |
|
|
|
|
→ Load models back from SQL |
→ load_from_sql() returns objects |
|
|
|
|
→ Compare predictions: orig vs loaded |
→ np.allclose(pred1, pred2) passes |
|
|
|
|
→ Test version selection |
→ Specific version retrieval works |
|
| SQL-23 |
MEDIUM |
Integration |
Wire model persistence into pipeline |
Models auto-save to SQL on training |
TODO |
|
|
|
→ Edit core/acm_main.py after model training |
→ Call mvman.save_to_sql() for each model |
|
|
|
|
→ Edit core/acm_main.py scoring phase |
→ Try load_from_sql() before load_from_cache() |
|
|
|
|
→ Maintain file-based fallback |
→ If SQL load fails, use artifacts/models |
|
|
|
|
→ Log save/load actions |
→ "Saved AR1 model v3 to SQL" messages |
|
Phase 3: SQL-Only Production (FUTURE)
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| SQL-30 |
MEDIUM |
core/acm_main.py |
Historian integration |
Live data ingestion working |
PLANNED |
|
|
|
→ Add XStudio_Historian database config |
→ configs/sql_connection.ini has [historian] section |
|
|
|
|
→ Create core/historian_client.py |
→ Queries sensor data by timestamp range |
|
|
|
|
→ Modify run_pipeline() data source |
→ Accepts --source historian flag |
|
|
|
|
→ Map sensor tags to ACM columns |
→ Tag mapping table in database |
|
|
|
|
→ Handle missing/stale data |
→ Graceful fallback or alert |
|
| SQL-31 |
MEDIUM |
core/output_manager.py |
Disable file writes in SQL-only mode |
SQL-only flag working |
PLANNED |
|
|
|
→ Add sql_only flag to OutputManager |
→ When True, skip all CSV writes |
|
|
|
|
→ Preserve directory structure checks |
→ Still create artifacts/ for logs |
|
|
|
|
→ Update write_tables() logic |
→ File writes only if not sql_only |
|
|
|
|
→ Test with --sql-only CLI flag |
→ Zero CSV files created |
|
| SQL-32 |
MEDIUM |
Scripts |
Equipment scheduler |
Automated multi-equipment runs |
PLANNED |
|
|
|
→ Create scripts/run_all_equipment.py |
→ Loops through Equipment table |
|
|
|
|
→ Parallel execution support |
→ multiprocessing for concurrent runs |
|
|
|
|
→ Error handling and logging |
→ Failed runs logged to SQL Runs table |
|
|
|
|
→ Email/Teams notifications |
→ Alerts on failures |
|
| SQL-33 |
LOW |
Deployment |
Production deployment setup |
Scheduled tasks + monitoring |
PLANNED |
|
|
|
→ Windows Task Scheduler configuration |
→ Daily runs at 02:00 local time |
|
|
|
|
→ Service account credentials |
→ SQL write permissions verified |
|
|
|
|
→ Monitoring dashboard |
→ Query v_Equip_Latest_Run for status |
|
|
|
|
→ Retention policy for old data |
→ Archive runs older than 1 year |
|
Legacy Items (Superseded)
| ID |
Priority |
Module |
Task |
Completion Criteria |
Status |
| FUSE-05 |
N/A |
core/output_manager.py |
Dual-write orchestration |
File + SQL path unified |
IMPLEMENTED |
| DRFT-01 |
Deferred |
core/drift.py |
Alert mode semantics migration |
Moved to metadata |
Deferred |
11 Summary Statistics
| Priority |
Count |
Status |
Notes |
| Critical |
5 |
Open |
3 Forecast + 2 SQL Phase 1 |
| High |
8 |
Open |
4 Charts + 4 SQL Phase 1/2 |
| Medium |
22 |
Open |
Analytics + Performance + SQL |
| Low |
12 |
Open |
Docs + Ops + SQL Phase 3 |
| Deferred |
17 |
Deferred |
AVEVA features |
12 Completed Task Stats (as of 2025-11-12)
| Area |
Completed Count |
Notes |
| Analytics (ANA) |
7 |
ANA-01, ANA-02, ANA-03, ANA-04, ANA-07, ANA-09, ANA-12 |
| Outputs & Reporting |
12 |
OUT-03, OUT-05, OUT-20, OUT-21, OUT-24, OUT-26, OUT-27, OUT-28, CHART-03, CHART-04, CHART-10, CHART-12 |
| Technical Debt |
1 |
DEBT-04 |
| Regimes (REG) |
8 |
REG-09, REG-10, REG-11, REG-12, REG-13, REG-14, REG-15, REG-16 (validated via chunk_replay runs 2025-11-12) |
| Total |
28 |
Completed items removed from active backlog; history in git commits. |
13 Roadmap
Phase 1 (Current) – Analytical Backbone Hardening
Phase 2 (Next) – Advanced Analytics (RUL, Residuals, Diagnostics)
Phase 3 (Future) – SQL Integration & Deployment
Phase 4 (Future) – Continuous Streaming / Online Learning
Here’s a clean, consolidated analytics task list (no duplicates, nothing “done” included), plus precise fix playbooks. It’s organized to be executed in-place without creating new files.
Master Analytics Task List
| ID |
Area |
Priority |
Task (What to change) |
Files / Functions |
Steps to fix (terse) |
Acceptance Criteria |
|
| ANA-06 |
Logger cleanliness |
P2 |
Remove special symbols/emojis from analytics logs |
utils/logger.py (or use site logger), all callers |
1) Search for special chars. 2) Replace with ASCII text. 3) Keep same levels. |
No non-ASCII glyphs in logs; CI grep passes. |
|
| ANA-08 |
PCA analytics provenance |
P2 |
Tag PCA outputs with phase (TRAIN |
SCORE) and reuse TRAIN cache |
forecast.py/omr.py (PCA path), output_manager.py |
1) Ensure TRAIN scores are cached/reused. 2) Add phase column to PCA tables. |
PCA tables contain phase, counts match expectations. |
| ANA-10 |
Timestamp QA fields |
P1 |
Add tz_stripped, future_rows_dropped, dup_timestamps_removed |
acm_main.py (read path), output_manager.py |
1) Compute counts during read/clean. 2) Write to DataQuality table. |
DataQuality table includes the three counters for every run. |
|
| ANA-11 |
Resampling guardrails |
P1 |
Persist cadence and fill stats and gate low-quality writes |
acm_main.py (_resample caller), output_manager.py |
1) Capture cadence_ok, expected_cadence, fill_ratio. 2) If strict failed, mark table failed and skip SQL writes for fused-dependent artifacts. |
DataQuality shows cadence metrics; fused-dependent tables skip on failure with reason. |
|
| ANA-13 |
OMR export schema |
P1 |
Centralize OMR exports; deterministic sort & types |
output_manager.py, omr.py |
1) One writer for OMR tables. 2) Enforce schema and sort_values(episode_id, rank). |
OMR CSV/SQL identical schema across runs; no dashboard flicker. |
|
| ANA-14 |
Config provenance |
P1 |
Stamp config_signature and config_source in every table |
output_manager.py, acm_main.py |
1) Compute signature/source once. 2) Add columns to every analytics write path. |
All tables show config_signature and `config_source=sql |
csv`. |
| ANA-15 |
Baseline buffer stats |
P2 |
Export retention and column-trim stats |
acm_main.py (buffer), output_manager.py |
1) Track kept_rows, dropped_rows_window, dropped_cols_noncommon. 2) Write baseline_buffer_stats.csv and SQL. |
Stats table exists; counts add up to raw input. |
|
| ANA-16 |
Detector saturation visibility |
P2 |
Persist clip_z_used, train_p99, sat_pct to calibration summary |
fuse.py (calibration), output_manager.py |
1) Compute and store these three fields. 2) Include in SQL table. |
CalibrationSummary rows contain fields; QA can trend saturation. |
|
| ANA-17 |
Present-detector stamp |
P2 |
Persist present_detectors list per run |
fuse.py, output_manager.py |
1) Join list into a string column or child table. |
Run diagnostics and DataQuality include detector list. |
|
| ANA-18 |
Docs sync |
P3 |
Sync README/backlog to reflect tuner method, thresholds policy, tiered writes |
README.md, backlog |
1) Update 3 sections only; remove references to “correlation to fused” as default. |
Docs match code; reviewers sign off. |
|
ANA-06: Logger cleanup
- Grep for non-ASCII glyphs in repository; replace with plain text.
- Ensure error/warn/info codes feed the analytics logs without special chars.
ANA-08: PCA provenance
- Ensure TRAIN PCA SPE/T² are cached and reused.
- Add
phase column to PCA analytics outputs (TRAIN or SCORE).
ANA-10/11: Data quality visibility
- During ingest: count timezone stripping, future row drops, duplicate timestamp removals.
- From resampling: record
cadence_ok, expected_cadence, fill_ratio, and strict_failed_reason.
- Write DataQuality table always; if
strict failed, skip Tier-C writes.
ANA-13: OMR schema hardening
- Centralize all OMR exports in
output_manager.
- Enforce dtypes, sort by
(episode_id, rank), and consistent column order.
- Return a dict of written tables for audit logs.
ANA-14: Config provenance everywhere
- Compute
config_signature and config_source at run start.
- Add both columns to every analytics DataFrame before write.
ANA-15: Baseline buffer stats
- Track rows removed due to windowing and columns dropped because non-common.
- Emit
baseline_buffer_stats.csv and SQL rows.
ANA-16: Saturation telemetry
- From calibration step, capture
train_p99, clip_z_used, and % of samples clipped on SCORE.
- Add to calibration summary and diagnostics.
ANA-17: Present detectors
- Persist the final list of detectors actually fused for the run as a comma-separated string in DataQuality or a child table.
ANA-18: Documentation sync
- Update three README sections: fusion tuning, thresholds policy (global fallback), tiered analytics writing.
- Remove references to correlation-to-fused as “default”.
Execution Notes
- No new files needed beyond an optional SQL table for weight tuning history; otherwise extend existing diagnostics JSONs and analytics tables.
- Keep changes minimal and centrally in
fuse.py and output_manager.py; surface flags via existing config mechanism.
End of ACM V8 Master Backlog – Consolidated Edition (2025-11-11)